package dao;

import entidad.Transferencia;
import java.util.ArrayList;
import java.util.Date;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.NoResultException;
import javax.persistence.NonUniqueResultException;
import javax.persistence.Query;

public class TransferenciaDAO {
    
    private EntityManagerFactory emf = JPAUtil.getEntityManagerFactory();
    
    public void crear(Transferencia object) {
        EntityManager em = emf.createEntityManager();
        em.getTransaction().begin();
        try {
            em.persist(object);
            em.getTransaction().commit();
        } catch (Exception e) {
            e.printStackTrace();
            em.getTransaction().rollback();
        } finally {
            em.close();
        }
    }

    public boolean eliminar(Transferencia object) {
        EntityManager em = emf.createEntityManager();
        em.getTransaction().begin();
        boolean ret = false;
        try {
            em.remove(object);
            em.getTransaction().commit();
            ret = true;
        } catch (Exception e) {
            e.printStackTrace();
            em.getTransaction().rollback();
        } finally {
            em.close();
            return ret;
        }
    }

    public Transferencia leer(Transferencia object) {
        EntityManager em = emf.createEntityManager();
        Transferencia transferencia = null;
        Query q = em.createQuery("SELECT t FROM Transferencia t"
                + "WHERE t.id = :id")
                .setParameter("id", object.getId());
        try {
            transferencia = (Transferencia) q.getSingleResult();
        } catch (NoResultException e) {
            transferencia = null;
        } catch (NonUniqueResultException e) {
            transferencia = (Transferencia) q.getResultList().get(0);
        } catch (Exception e){
            e.printStackTrace();
        } finally {
            em.close();
            return transferencia;
        }
    }

    public boolean actualizar(Transferencia object, Transferencia nuevoObjeto) {
        EntityManager em = emf.createEntityManager();
        em.getTransaction().begin();
        boolean ret = false;
        try {
            object = leer(object);
            
            object.setCantidad(nuevoObjeto.getCantidad());
            object.setDescripcion(nuevoObjeto.getDescripcion());
            object.setFecha(nuevoObjeto.getFecha());
            object.setLote(nuevoObjeto.getLote());
            object.setMotivo(nuevoObjeto.getMotivo());
            object.setProducto(nuevoObjeto.getProducto());
            
            em.merge(object);
            em.getTransaction().commit();
            ret = true;
        } catch (Exception e) {
            e.printStackTrace();
            em.getTransaction().rollback();
        } finally {
            em.close();
            return ret;
        }
    }

    public ArrayList<Transferencia> buscar(Date inicio, Date fin, boolean carga, boolean descarga, boolean devolucion) {
        EntityManager em = emf.createEntityManager();
        Query q = em.createQuery("SELECT t FROM Transferencia t "
                + "WHERE t.motivo = :id")
                .setParameter("id", 0);//////////////////////////////////
        
        ArrayList<Transferencia> ret = (ArrayList<Transferencia>) q.getResultList();
        em.close();
//        for(Transferencia t : sistema.getTransferencias()){
//            if(inicio.isBefore(t.getFecha()) && fin.isAfter(t.getFecha()) &&
//               ((t.getMotivo().equals(Transferencia.carga) && carga) ||
//                (t.getMotivo().equals(Transferencia.descarga) && descarga) ||
//                (t.getMotivo().equals(Transferencia.devolucion) && devolucion))){
//                listaR.add(t);
//            }
//        }
        return ret;
    }
    
}
